* add qmake options to specify libraries.
* fix no libusb along lines of #610
* correct inclusion of shapelib headers.
* more closely match original includes
instead of trying to use HAVE_*, ENABLED_* *_INHIBITED and
-I options in a consistent manner.
We can revisit this after the demise of configure.
* add qmake message when libusb is disabled.
lessThan(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR) | \
if(equals(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR):lessThan(QT_MINOR_VERSION, $$MIN_QT_VERSION_MINOR)) | \
if(equals(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR):equals(QT_MINOR_VERSION, $$MIN_QT_VERSION_MINOR):lessThan(QT_PATCH_VERSION, $$MIN_QT_VERSION_PATCH)) {
- error("$$QMAKE_QMAKE uses Qt version $$QT_VERSION but version $${MIN_QT_VERSION_MAJOR}.$${MIN_QT_VERSION_MINOR}.$${MIN_QT_VERSION_PATCH} or newer is required.")
+ error("$$QMAKE_QMAKE uses Qt version $$QT_VERSION but version $${MIN_QT_VERSION_MAJOR}.$${MIN_QT_VERSION_MINOR}.$${MIN_QT_VERSION_PATCH} or newer is required.")
}
QT -= gui
CONFIG += console
CONFIG -= app_bundle
CONFIG += c++14
+CONFIG += link_pkgconfig
TEMPLATE = app
FILTER_HEADERS = $$FILTERS
FILTER_HEADERS ~= s/\.cc/.h/g
-SHAPE=shapelib/shpopen.c shapelib/dbfopen.c shapelib/safileio.c
-
-ZLIB=zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/inffast.c \
- zlib/inflate.c zlib/infback.c zlib/inftrees.c zlib/trees.c \
- zlib/uncompr.c zlib/gzlib.c zlib/gzclose.c zlib/gzread.c \
- zlib/gzwrite.c zlib/zutil.c
-
JEEPS += jeeps/gpsapp.cc jeeps/gpscom.cc \
jeeps/gpsmath.cc jeeps/gpsmem.cc \
jeeps/gpsprot.cc jeeps/gpsread.cc \
gbfile.cc parse.cc session.cc main.cc globals.cc \
src/core/textstream.cc \
src/core/usasciicodec.cc \
- src/core/xmlstreamwriter.cc
+ src/core/xmlstreamwriter.cc
HEADERS = \
an1sym.h \
random.h \
session.h \
shape.h \
- shapelib/shapefil.h \
strptime.h \
subrip.h \
unicsv.h \
xcsv.h \
xmlgeneric.h \
yahoo.h \
- zlib/crc32.h \
- zlib/deflate.h \
- zlib/gzguts.h \
- zlib/inffast.h \
- zlib/inffixed.h \
- zlib/inflate.h \
- zlib/inftrees.h \
- zlib/trees.h \
- zlib/zconf.h \
- zlib/zlib.h \
- zlib/zutil.h \
src/core/datetime.h \
src/core/file.h \
src/core/logging.h \
HEADERS += $$FILTER_HEADERS
-INCLUDEPATH += zlib
-
load(configure)
CONFIG(release, debug|release): DEFINES *= NDEBUG
# this is used by zlib
DEFINES += HAVE_STDARG_H
}
- DEFINES += HAVE_LIBUSB_1_0
SOURCES += gbser_posix.cc
HEADERS += gbser_posix.h
- JEEPS += jeeps/gpslibusb.cc
INCLUDEPATH += jeeps
}
win32 {
DEFINES += __WIN32__ _CONSOLE
- DEFINES -= UNICODE ZLIB_INHIBITED
+ DEFINES -= UNICODE
CONFIG(debug, debug|release) {
DEFINES += _DEBUG
}
SOURCES += gbser_win.cc
HEADERS += gbser_win.h
JEEPS += jeeps/gpsusbwin.cc
- LIBS += "-lsetupapi"
+ LIBS += "-lsetupapi"
RC_FILE = win32/gpsbabel.rc
}
QMAKE_CXXFLAGS += /MP -wd4100
}
-linux|openbsd {
- LIBS += "-lusb-1.0"
-}
-
-macx {
- LIBS += -lobjc -framework IOKit -framework CoreFoundation
- INCLUDEPATH += mac/libusb \
- mac/libusb/Xcode
- SOURCES += mac/libusb/core.c \
- mac/libusb/descriptor.c \
- mac/libusb/hotplug.c \
- mac/libusb/io.c \
- mac/libusb/strerror.c \
- mac/libusb/sync.c \
- mac/libusb/os/darwin_usb.c \
- mac/libusb/os/poll_posix.c \
- mac/libusb/os/threads_posix.c
- HEADERS += mac/libusb/hotplug.h \
- mac/libusb/libusb.h \
- mac/libusb/libusbi.h \
- mac/libusb/version.h \
- mac/libusb/version_nano.h \
- mac/libusb/os/darwin_usb.h \
- mac/libusb/os/poll_posix.h \
- mac/libusb/os/threads_posix.h
-}
+include(shapelib.pri)
+include(zlib.pri)
+include(libusb.pri)
-SOURCES += $$ALL_FMTS $$FILTERS $$SUPPORT $$SHAPE $$ZLIB $$JEEPS
+SOURCES += $$ALL_FMTS $$FILTERS $$SUPPORT $$JEEPS
# We don't care about stripping things out of the build. Full monty, baby.
DEFINES += MAXIMAL_ENABLED
DEFINES += FILTERS_ENABLED
-DEFINES += SHAPELIB_ENABLED
DEFINES += CSVFMTS_ENABLED
# Creator insists on adding -W to -Wall which results in a completely
# example usage:
# make clang-tidy RUN_CLANG_TIDY_FLAGS="-header-filter=.*\\\.h -checks=-*,modernize-use-nullptr -fix"
# It seems to be better to use run-clang-tidy with the compilation database as opposed to
-# running clang-tidy directly and listing the
+# running clang-tidy directly and listing the
# compilation options on the clang-tidy line after --.
# An example is modernize-use-override which inserts repeadted overrides when run directly,
# but works as expected when run with run-clang-tidy.
QMAKE_EXTRA_TARGETS += cppcheck
gpsbabel.pdf.depends = FORCE
-gpsbabel.pdf.commands += perl xmldoc/makedoc &&
+gpsbabel.pdf.commands += perl xmldoc/makedoc &&
gpsbabel.pdf.commands += xmlwf xmldoc/readme.xml && #check for well-formedness
gpsbabel.pdf.commands += xmllint --noout --valid xmldoc/readme.xml && #validate
gpsbabel.pdf.commands += xsltproc -o gpsbabel.fo xmldoc/babelpdf.xsl xmldoc/readme.xml &&
#include "config.h"
#endif
#if HAVE_LIBUSB_1_0
+#ifdef LIBUSB_H_INCLUDE
+// Warning: LIBUSB_H_INCLUDE necessarily includes bracket or double quote
+// characters.
+// qmake -tp vc doesn't properly quote these characters, and the
+// produced project file is invalid. However, we don't use libusb
+// at all on windows, so this isn't an issue in this application.
+# include LIBUSB_H_INCLUDE
+#else // TODO: delete this clause when configure is removed and CMakeLists updated.
# if __APPLE__
// We use our own libusb.
# include "mac/libusb/libusb.h"
# else
# include <libusb-1.0/libusb.h>
# endif
+#endif
#include "../defs.h"
#include "garminusb.h"
#include "gpsdevice.h"
#endif
#include "../defs.h"
-#include "src/core/logging.h"
#if !HAVE_LIBUSB_1_0
--- /dev/null
+macx|linux|openbsd {
+ !defined(WITH_LIBUSB, var) {
+ macx: WITH_LIBUSB = included
+ linux|openbsd: WITH_LIBUSB = system
+ }
+ equals(WITH_LIBUSB, no) {
+ message("libusb-1.0 disabled")
+ JEEPS += jeeps/gpsusbstub.cc
+ } else {
+ DEFINES += HAVE_LIBUSB_1_0
+ JEEPS += jeeps/gpslibusb.cc
+ equals(WITH_LIBUSB, pkgconfig) {
+ message("Using libusb-1.0 found by pkg-config")
+ PKGCONFIG += libusb-1.0
+ DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
+ } else {
+ linux|openbsd {
+ equals(WITH_LIBUSB, system) {
+ LIBS += "-lusb-1.0"
+ DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb-1.0/libusb.h>)
+ } else:equals(WITH_LIBUSB, custom) {
+ message("libusb-1.0 is enabled but but must be manually configured")
+ message(" e.g. qmake WITH_LIBUSB=custom LIBS+=... INCLUDEPATH+=...")
+ DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
+ } else {
+ error("WITH_LIBUSB=no|pkgconfig|system*|custom");
+ }
+ }
+
+ macx {
+ equals(WITH_LIBUSB, included) {
+ # TODO: It would be better to create an archive and link to it
+ # to separate library build requirements from gpsbabel requirements.
+ DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(\"mac/libusb/libusb.h\")
+ LIBS += -lobjc -framework IOKit -framework CoreFoundation
+ INCLUDEPATH += mac/libusb \
+ mac/libusb/Xcode
+ SOURCES += mac/libusb/core.c \
+ mac/libusb/descriptor.c \
+ mac/libusb/hotplug.c \
+ mac/libusb/io.c \
+ mac/libusb/strerror.c \
+ mac/libusb/sync.c \
+ mac/libusb/os/darwin_usb.c \
+ mac/libusb/os/poll_posix.c \
+ mac/libusb/os/threads_posix.c
+ HEADERS += mac/libusb/hotplug.h \
+ mac/libusb/libusb.h \
+ mac/libusb/libusbi.h \
+ mac/libusb/version.h \
+ mac/libusb/version_nano.h \
+ mac/libusb/os/darwin_usb.h \
+ mac/libusb/os/poll_posix.h \
+ mac/libusb/os/threads_posix.h
+ } else:equals(WITH_LIBUSB, custom) {
+ message("libusb-1.0 is enabled but but must be manually configured")
+ message(" e.g. qmake WITH_LIBUSB=custom LIBS+=... INCLUDEPATH+=...")
+ DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
+ } else {
+ error("WITH_LIBUSB=no|pkgconfig|included*|custom");
+ }
+ }
+ }
+ }
+}
#include "defs.h"
#include "shape.h"
-#include "shapelib/shapefil.h"
+#if SHAPELIB_ENABLED
+#if HAVE_LIBSHAPE
+# include <shapefil.h>
+#else
+# include "shapelib/shapefil.h"
+#endif
-#if SHAPELIB_ENABLED
#define MYNAME "shape"
/************************************************************************/
#include "defs.h" // for arglist_t, ARGTYPE_STRING, Waypoint, route_head, CET_CHARSET_ASCII, FF_CAP_RW_ALL, ff_cap, ff_type, ff_type_file
#include "format.h" // for Format
-#include "shapelib/shapefil.h" // for DBFHandle, SHPAPI_CALL, SHPHandle
+#if SHAPELIB_ENABLED
+#if HAVE_LIBSHAPE
+# include <shapefil.h>
+#else
+# include "shapelib/shapefil.h" // for DBFHandle, SHPAPI_CALL, SHPHandle
+#endif
-#if SHAPELIB_ENABLED
class ShapeFormat : public Format
{
public:
--- /dev/null
+!defined(WITH_SHAPELIB, var):WITH_SHAPELIB = included
+equals(WITH_SHAPELIB, no) {
+ message("shapelib disabled")
+} else {
+ DEFINES += SHAPELIB_ENABLED
+ equals(WITH_SHAPELIB, pkgconfig) {
+ message("Using shapelib found by pkg-config")
+ PKGCONFIG += shapelib
+ DEFINES += HAVE_LIBSHAPE
+ } else:equals(WITH_SHAPELIB, included) {
+ # TODO: It would be better to create an archive and link to it
+ # to separate library build requirements from gpsbabel requirements.
+ SOURCES += shapelib/shpopen.c shapelib/dbfopen.c shapelib/safileio.c
+ HEADERS += shapelib/shapefil.h
+ } else:equals(WITH_SHAPELIB, custom) {
+ message("shapelib is enabled but but must be manually configured")
+ message(" e.g. qmake WITH_SHAPELIB=custom LIBS+=... INCLUDEPATH+=...")
+ DEFINES += HAVE_LIBSHAPE
+ } else {
+ error("WITH_SHAPELIB=no|pkgconfig|included*|custom");
+ }
+}
--- /dev/null
+!defined(WITH_ZLIB, var):WITH_ZLIB = included
+equals(WITH_ZLIB, no) {
+ message("zlib disabled")
+ DEFINES += ZLIB_INHIBITED
+} else {
+ equals(WITH_ZLIB, pkgconfig) {
+ message("Using zlib found by pkg-config")
+ PKGCONFIG += $$shell_quote(zlib > 1.2.8)
+ DEFINES += HAVE_LIBZ
+ } else:equals(WITH_ZLIB, included) {
+ # TODO: It would be better to create an archive and link to it
+ # to separate library build requirements from gpsbabel requirements.
+ SOURCES += zlib/adler32.c \
+ zlib/compress.c \
+ zlib/crc32.c \
+ zlib/deflate.c \
+ zlib/inffast.c \
+ zlib/inflate.c \
+ zlib/infback.c \
+ zlib/inftrees.c \
+ zlib/trees.c \
+ zlib/uncompr.c \
+ zlib/gzlib.c \
+ zlib/gzclose.c \
+ zlib/gzread.c \
+ zlib/gzwrite.c \
+ zlib/zutil.c
+ INCLUDEPATH += zlib
+ HEADERS += zlib/crc32.h \
+ zlib/deflate.h \
+ zlib/gzguts.h \
+ zlib/inffast.h \
+ zlib/inffixed.h \
+ zlib/inflate.h \
+ zlib/inftrees.h \
+ zlib/trees.h \
+ zlib/zconf.h \
+ zlib/zlib.h \
+ zlib/zutil.h
+ } else:equals(WITH_ZLIB, custom) {
+ message("zlib is enabled but but must be manually configured")
+ message(" e.g. qmake WITH_ZLIB=custom LIBS+=... INCLUDEPATH+=...")
+ DEFINES += HAVE_LIBZ
+ } else {
+ error("WITH_ZLIB=no|pkgconfig|included*|custom");
+ }
+}